import { nGet } from "../request";
import { showInformationMessage, showErrorMessage } from "../vscode/message";
import { getPackageJson } from "../packageJson";
import type { PackageConfig } from "@ap/types/config";
import { read, ReadMode, writeFile } from "../fs";
import { tempPath } from "../tempPath";
import path from "path";
import { arenaErrorMsg } from "@ap/util/vscode/errorMsg";

// 检查并更新代码片段文件。
export default async function checkSnippets(): Promise<void> {
  // 获取临时路径。
  const pathG = tempPath;
  if (!pathG) {
    return;
  }
  // 构造代码片段文件路径。
  const snippetsFilePath = path.join(pathG, ".vscode", "dao3-ap.code-snippets");
  if (!snippetsFilePath) {
    return;
  }

  // 获取API数据。
  const apiData = await fetchApiData();
  if (apiData) {
    // 如果需要，更新代码片段文件。
    await updateFileIfNeeded(snippetsFilePath, apiData);
  }
}

// 从远程API获取最新的代码片段数据。
async function fetchApiData(): Promise<string> {
  // 发起HTTP请求以获取数据。
  const response = await nGet<Record<string, any>>({
    url: "https://gitee.com/box3lab/arena_dts/raw/master/dao3-snippets.json",
  });
  if (response) {
    return JSON.stringify(response, null, 4);
  }
  return "";
}

// 如果远程内容与当前文件内容不同，更新文件。
async function updateFileIfNeeded(
  filePath: string,
  remoteText: string,
): Promise<void> {
  // 读取代码片段文件内容。
  const snippetsText = await read(filePath, { mode: ReadMode.READ });
  // 如果当前内容与远程内容不同，则更新文件。
  if (remoteText && snippetsText !== remoteText) {
    await writeFile(filePath, remoteText);
    // 显示更新成功的消息。
    showInformationMessage(`dao3-ap代码片段有新版本，同步成功`);
  }
}
